// 截取文本（从html/富文本
export const getText = (html: string, len: number | undefined = 20) => {
  const txt = html.replace(/<.*?>/g, '')
  return txt.length > len ? txt.substr(0, len) + '...' : txt
}

// 打乱一个数组
export function shuffleList(array: Array<any>) {
  for (let i = array.length - 1; i > 0; i--) {
    let j = Math.floor(Math.random() * (i + 1))
    let temp = array[i]
    array[i] = array[j]
    array[j] = temp
  }
}

// 对象数组转对象（取出一个为key，其他为value）
export function array2Object<T, K extends keyof T>(list: T[], key: K): Record<string | number, Omit<T, K>> {
  return Object.fromEntries(
    list.map((e) => {
      const { [key]: value, ...others } = e
      return [value, others]
    }),
  )
}

// 对象数组转置 keys：需要的列(最后会变成行
export function transposeObjList(list: any[], keys?: string[]) {
  if (!keys?.length) keys = Object.keys(list[0]) // ['a','b','c']
  const res: Record<string, any>[] = keys.map((name) => ({ name }))
  for (let targetRow of res) {
    list.forEach((sourceRow, i) => {
      targetRow[`value-${i}`] = sourceRow[targetRow.name]
    })
  }
  return res
}

// 日期处理
export const dateFormat = (date: Date | string | number, fmt: string = 'YYYY-MM-DD hh:mm:ss') => {
  let ret
  if (!date) return ''
  // Object.prototype.toString.call(date) != '[object Date]'
  if (!(date instanceof Date)) date = new Date(date)
  const opt: any = {
    'Y+': date.getFullYear().toString(), // 年
    'M+': (date.getMonth() + 1).toString(), // 月
    'D+': date.getDate().toString(), // 日
    'h+': date.getHours().toString(), // 时
    'm+': date.getMinutes().toString(), // 分
    's+': date.getSeconds().toString(), // 秒
  }
  for (let k in opt) {
    ret = new RegExp('(' + k + ')').exec(fmt)
    if (ret) fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0'))
  }
  return fmt
}
